# 作者: 菅世博
# 2025年02月21日20时41分07秒
# 512326042@qq.com
import sys
import os


# 1、通过try进行异常捕捉，确保输入的内容一定是一个整型数，然后判断该整型数是否是对称数，12321就是对称数，123321也是对称数，否则就打印不是，非整型抛异常，不是对称数抛异常
def is_symmetrical():
    try:
        num = int(input('请输入一个整数'))

        num_str = str(num)
        if num_str == num_str[::-1]:
            print('是对称数')
        else:
            print('不是对称数')

    except Exception as e:
        print(f'未知错误: {e}')


# 2、传递参数file1，通过sys.argv[1]打开文件，读取里边的内容并打印,如果传递的参数是file2，程序同样可以打印file2的文件内容
def read_file(file_name):
    try:
        # 使用 with 语句打开文件，确保文件在使用后自动关闭
        with open(file_name, 'r', encoding='utf-8') as file:
            txt = file.read()  # 读取文件内容
            print(txt)  # 打印文件内容
    except FileNotFoundError:
        print(f"错误: 文件 {file_name} 不存在")
    except Exception as e:
        print(f"未知错误: {e}")


def main():
    if len(sys.argv) == 2:
        file_name = sys.argv[1]
        read_file(file_name)
    else:
        print("请指定文件名")


# 3.目录深度遍历
def scan_dir(path, width):  # 深度优先遍历
    """
    深度优先遍历
    :param width: # 打印的空格
    :param path # 要遍历的目录
    :return:
    """
    file_name_list = os.listdir(path)
    for file_name in file_name_list:
        print(' ' * width + file_name)  # 打印名字
        new_path = path + '/' + file_name  # 拼接为正确的路径
        if os.path.isdir(file_name):  # 是文件夹返回True，不是返回False
            scan_dir(new_path, width + 4)  # 每递归一次加4个空格


# 4.二叉树
class Node(object):
    """节点类"""

    def __init__(self, elem=-1, lchild=None, rchild=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild


class Tree(object):
    """树类"""

    def __init__(self):
        self.root = None  # 根节点
        self.queue = []  # 辅助队列

    def add_node(self, elem):
        """添加节点"""
        new_node = Node(elem)
        self.queue.append(new_node)  # 将新节点加入队列
        # 判断树根是否为空
        if self.root is None:
            self.root = new_node
        else:
            if self.queue[0].lchild is None:  # 父亲的左孩子为空，新节点就作为左孩子
                self.queue[0].lchild = new_node
            else:  # 父亲的左孩子不为空，新节点就作为右孩子
                self.queue[0].rchild = new_node
                self.queue.pop(0)  # 将已经处理过的节点从队列中删除——出队

    def pre_order(self, current_node: Node):
        """先序遍历"""
        if current_node:
            print(current_node.elem, end=' ')
            self.pre_order(current_node.lchild)
            self.pre_order(current_node.rchild)


if __name__ == '__main__':
    is_symmetrical()
    # main()
    # scan_dir('.', 0)
    # tree = Tree()
    # for i in range(1, 11):
    #     tree.add_node(i)
    # tree.pre_order(tree.root)
